package com.lemobar.pay.model;

import com.lemobar.pay.model.alipay.response.AliPayTradeRefundResponse;
import com.lemobar.pay.model.wxpay.response.WxPayRefundResponse;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.simpleframework.xml.Element;

import java.lang.reflect.Field;

/**
 * 申请退款 返回的参数
 * wx -> {@link WxPayRefundResponse}
 * ali -> {@link AliPayTradeRefundResponse}
 *
 * @see <a href="https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4">申请退款</a>
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class RefundResponse {

    /**
     * 业务结果
     * wx -> result_code SUCCESS/FAIL  SUCCESS=关闭成功 FAIL=关闭失败(去看errCode)   <br>
     * ali -> code 10000/其他   10000=关闭成  其他=关闭失败(去看errCode) 公共错误码：https://opendocs.alipay.com/open/common/105806  + 业务错误码：...
     * epay -> resultCode success/error    error=申请失败 success=成功
     */
    private String resultCode;

    /**
     * 业务返回码 错误代码                   <br>
     * wx -> err_code   业务错误码
     * ali -> sub_code  公共错误码：https://opendocs.alipay.com/open/common/105806  + 业务错误码：...
     */
    private String errCode;

    /**
     * 业务返回 错误代码描述                 <br>
     * wx -> err_code_des
     * ali -> sub_msg
     */
    private String errCodeDes;

    /**
     * 外部订单号
     * wx -> transaction_id
     * ali -> trade_no
     */
    private String outOrderId;

    /**
     * 内部订单号/商户订单号
     * wx -> out_trade_no
     * ali -> out_trade_no
     */
    private String orderId;

    /**
     * 外部退款单号
     * wx -> refund_id
     * ali -> 没有返回
     */
    private String outRefundId;

    /**
     * 内部退款单号/商户退款单号
     * 商户系统内部的退款单号
     * wx -> out_refund_no
     * ali -> 没有返回,填入 RefundRequest 传入的refundId
     */
    private String refundId;


    /**
     * 退款金额(元)
     * 退款总金额,单位为元,可以做部分退款
     * wx -> refund_fee
     * ali -> refund_fee
     */
    private Double refundAmount;



    public static void main(String[] args) {
        Field[] declaredFields =
                RefundResponse.class.getDeclaredFields();
        for (Field f : declaredFields) {
            System.out.println(".".concat(f.getName())+"()");
        }
    }
}
